package com.erp.erp_servers.business.imp;

import com.erp.erp_dao.business.ICarryDetailDao;
import com.erp.erp_entitys.business.entity.CarryDetailEntity;
import com.erp.erp_entitys.business.entity.CarryDetailProductEntity;
import com.erp.erp_entitys.business.req.*;
import com.erp.erp_entitys.business.rsp.*;
import com.erp.erp_servers.business.ICarryDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;

/**
 * @ClassName : CarryDetailServiceImp
 * @Description : 出运明细实现层
 * @Author : lst
 * @Date: 2021-01-07 20:40
 */
@Service
public class CarryDetailServiceImp implements ICarryDetailService {

    /**
     * 注入出运明细mapper
     */
    private final ICarryDetailDao carryDetailDao;

    @Autowired
    public CarryDetailServiceImp(ICarryDetailDao carryDetailDao) {
        this.carryDetailDao = carryDetailDao;
    }


    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public CarryDetailEntity queryById(Integer id) {
        return carryDetailDao.queryById(id);
    }


    /**
     * 通过实体作为筛选条件查询
     *
     * @param carryDetail 实例对象
     * @return 对象列表
     */
    @Override
    public List<CarryDetailEntity> queryAll(CarryDetailEntity carryDetail) {
        return carryDetailDao.queryAll(carryDetail);
    }


    /**
     * 新增数据
     *
     * @param carryDetail 实例对象
     * @return 影响行数
     */
    @Override
    public int insert(CarryDetailEntity carryDetail) {
        return carryDetailDao.insert(carryDetail);
    }


    /**
     * 修改数据
     *
     * @param carryDetail 实例对象
     * @return 影响行数
     */
    @Override
    public int update(CarryDetailEntity carryDetail) {
        return carryDetailDao.update(carryDetail);
    }



    /**
     * 获取出运明细信息
     * @param req 查询条件
     * @return 出运明细信息
     */
    @Override
    public List<ImportCarryDetailRsp> getCarryDetailInfo(ImportCarryDetailInfoReq req) {
        return carryDetailDao.getCarryDetailInfo(req);
    }

    /**
     * 出运明细分页查询
     * @param req 查询条件
     * @return 出运明细分页
     */
    @Override
    public List<CarryDetailEntity> getCarryDetailPageList(CarryDetailPageListInfoReq req) {
        return carryDetailDao.getCarryDetailPageList(req);
    }


    /**
     * 获取出运计划信息
     * @param req 查询条件
     * @return 出运计划信息
     */
    @Override
    public List<ImportCarryPlanInfoRsp> getShipmentPlanInfo(ImportCarryPlanInfoReq req) {
        return carryDetailDao.getShipmentPlanInfo(req);
    }

    /**
     * 通过父id获取出运计划产品明细信息
     * @param id 出运计划主表id
     * @return 产品明细信息
     */
    @Override
    public List<ImportCarryPlanProductInfoRsp> getCarryPlanProductByParentId(Integer id) {
        return carryDetailDao.getCarryPlanProductByParentId(id);
    }

    /**
     * 通过id获取出运计划信息
     * @param id 出运计划ID
     * @return 运计划信息
     */
    @Override
    public CarryPlanInfoRsp getCarryPlanById(Integer id) {
        return carryDetailDao.getCarryPlanById(id);
    }

    /**
     * 导出运计划费用信息
     * @param id 出运计划id
     * @return 出运计划费用信息
     */
    @Override
    public List<ImportPlanCostInfoRsp> getCarryPlanCostInfo(Integer id) {
        return carryDetailDao.getCarryPlanCostInfo(id);
    }

    /**
     * 导出运计划附件信息
     * @param id 出运计划id
     * @return 出运计划附件信息
     */
    @Override
    public List<ImportCarryPlanAnnexRsp> getCarryPlanAnnexInfo(Integer id) {
        return carryDetailDao.getCarryPlanAnnexInfo(id);
    }

    /**
     * 导出运计划配件信息
     * @param id 出运计划id
     * @param productId 对应产品id
     * @return 出运计划配件信息
     */
    @Override
    public List<ImportCarryPlanPartsRsp> getCarryPlanPartsInfo(Integer id, Integer productId) {
        return carryDetailDao.getCarryPlanPartsInfo(id, productId);
    }


    /**
     * 销售出库获取出运明细主表关联库存信息
     * @param req 查询参数
     * @return 出运明细主表关联库存信息
     */
    @Override
    public List<CarryDetailEntity> getImportCarryOfSaleOutStock(ImportCarryDetailInfoReq req) {
        return carryDetailDao.getImportCarryOfSaleOutStock(req);
    }

    /**
     * 导出运计划主表关联调拨信息
     * @param req 查询参数
     * @return 出运计划主表关联调拨信息
     */
    @Override
    public List<ImportCarryPlanInfoRsp> importCarryPlanAssociateTransfer(ImportCarryPlanInfoReq req) {
        return carryDetailDao.importCarryPlanAssociateTransfer(req);
    }

    /**
     * 导出运计划子表关联调拨信息
     * @param id 出运计划主表id
     * @return 产品明细信息
     */
    @Override
    public List<ImportCarryPlanProductInfoRsp> importCarryPlanProductAssociateTransfer(Integer id) {
        return carryDetailDao.importCarryPlanProductAssociateTransfer(id);
    }

    /**
     * 通过id获取出运计划信息
     * @param id 出运计划ID
     * @return 运计划信息
     */
    @Override
    public CarryPlanInfoRsp queryCarryPlanInfoById(Integer id) {
        return carryDetailDao.queryCarryPlanInfoById(id);
    }

    /**
     * 本月出运单据
     * @param req 查询条件
     * @return 总和
     */
    @Override
    public long getCarryBillNoCount(StatisticsInfoReq req) {
        return carryDetailDao.getCarryBillNoCount(req);
    }

    /**
     * 本月出运单据信息
     * @param req 查询条件
     * @return 本月出运单据信息
     */
    @Override
    public List<CarryDetailEntity> getCarryInfo(StatisticsInfoReq req) {
        return carryDetailDao.getCarryInfo(req);
    }

    /**
     * 统计采购出货情况
     * @param req 查询参数
     * @return 采购出货情况
     */
    @Override
    public List<StatisticsPurchaseInfoRsp> getStatisticsPurchaseInfo(PurchaseStatisticsOneReq req) {
        return carryDetailDao.getStatisticsPurchaseInfo(req);
    }

    @Override
    public List<PurchaseStatisticsTwoRes> getStatisticsTwoPurchaseInfo(PurchaseStatisticsTwoReq req) {
        return carryDetailDao.getStatisticsTwoPurchaseInfo(req);
    }

    /**
     * 按出运明细统计采购应付款信息
     * @param req 查询参数
     * @return 按出运明细统计采购应付款信息
     */
    @Override
    public List<StatisticsCarryDetailPaymentRsp> getStatisticsCarryDetailPaymentInfo(CarryDetailStatisticsPaymentReq req) {
        return carryDetailDao.getStatisticsCarryDetailPaymentInfo(req);
    }

    @Override
    public List<StatisticShippingDetailRsp> getShippingDetailByPage(statisticShippingDetailReq req) {
        return carryDetailDao.getShippingDetailByPage(req);
    }

    /**
     * 获取已做出运明细数量
     * @param req 查询参数
     * @return 已做出运明细数量
     */
    @Override
    public BigDecimal getUsedCarryDetailNum(CarryDetailInfoReq req) {
        return carryDetailDao.getUsedCarryDetailNum(req);
    }


    @Override
    public List<DetailUnBillExchangeRsq> detailUnBillExchangeList(DetailUnBillExchangeReq req) {
        return carryDetailDao.detailUnBillExchangeList(req);
    }

    @Override
    public List<DetailShippedUnExchangeRsp> detailShippedUnExchangeList(DetailShippedUnExchangeReq req) {
        return carryDetailDao.detailShippedUnExchangeList(req);
    }

    /**
     * 获取已被使用的产品数量
     * @param req 查询参数
     * @return 已被使用的产品数量
     */
    @Override
    public BigDecimal getUsedProductSum(CarryDetailProductEntity req) {
        return carryDetailDao.getUsedProductSum(req);
    }

    /**
     * 获取已被使用的产品数量（采购）
     * @param productCode 产品编码
     * @param specNo 规格编码
     * @return 已被使用的产品数量（采购）
     */
    @Override
    public BigDecimal getUsedProductSumInPurchase(String productCode, String specNo) {
        return carryDetailDao.getUsedProductSumInPurchase(productCode, specNo);
    }

    /**
     * 出运是否结汇统计
     * @param req 查询参数
     * @return 出运是否结汇统计
     */
    @Override
    public List<ShipmentIsBillExchangeRsp> getShipmentIsBillExchange(ShipmentIsBillExchangeReq req) {
        return carryDetailDao.getShipmentIsBillExchange(req);
    }

    @Override
    public Integer surplusAmount(String shipmentNo, Integer carryDetailProductId, String exportCode, String productCode, String specNo) {
        return carryDetailDao.surplusAmount(shipmentNo, carryDetailProductId, exportCode, productCode, specNo);
    }
}
